﻿@{
    int? eventId = Page.EventId;

    // 현재 이벤트를 저장하는 총합 변수(편집 페이지에 있는 경우)
    dynamic eventInfo = null;
    var calendars = Calendar.GetUserCalendars(WebSecurity.CurrentUserId, Permission.Edit);

    // 다음은 폼에 사용할 시간입니다.
    DateTime start;
    DateTime end;

    // 페이지를 편집합니다.
    if (eventId.HasValue) {
        // 이벤트 ID가 현재 사용자에게 연결되어 있는지 확인
        eventInfo = Event.GetUserEvent(WebSecurity.CurrentUserId, eventId.Value);

        if (eventInfo == null) {
            RequestData.SetValue("InfoPaneTitle", "잘못된 이벤트 ID");
            return;
        }
        RequestData.SetValue("InfoPaneTitle", "이벤트 편집: " + eventInfo.Name);

        start = Time.UtcToLocal(eventInfo.Start);
        end = Time.UtcToLocal(eventInfo.End);
    } else {
        RequestData.SetValue("InfoPaneTitle", "이벤트 추가");

        start = Time.NowInLocal;
        var halfHour = TimeSpan.FromMinutes(30);
        end = start.Add(halfHour);
    }

    if (IsPost) {
        
        var name = Page.Name;
        if (String.IsNullOrEmpty(name)) {
            ModelState.AddError("name", "이벤트 이름을 지정해야 합니다.");
        }

        var description = Page.Description;        

        var allDay = (Page.AllDay == "on") ? true : false;

        start = Time.NowInLocal;
        end = Time.NowInLocal;

        // 시작 및 끝 날짜/시간을 확인합니다.
        if (!DateTime.TryParse(Page.StartDate + " " + Page.StartTime, out start) ||
            !DateTime.TryParse(Page.StartDate + " " + Page.EndTime, out end)) {
            ModelState.AddFormError("날짜 / 시간 문자열 중 하나를 읽을 수 없습니다.");
        }

        var location = Page.Location;
        if (!String.IsNullOrEmpty(location) && (location.Length > 100)) {
            ModelState.AddError("location", "위치를 지정하는 경우 100자 이하여야 합니다.");
        }
        
        // Don
        var don = Int32.Parse(Page.Don);

        var calendarId = Int32.Parse(Page.CalendarId);
        // 지정된 달력에서 이벤트를 만들 수 있는지 확인합니다.
        bool canMakeEvent = false;
        var editableCalendars = Calendar.GetUserCalendars(WebSecurity.CurrentUserId, Permission.Edit);

        foreach (var calendar in editableCalendars) {
            if (calendar.CalendarId == calendarId) {
                canMakeEvent = true;
                break;
            }
        }

        if (!canMakeEvent) {
            ModelState.AddError("calendar", "지정된 달력에 이벤트를 추가할 수 없습니다.");
        }

        if (ModelState.IsValid) {
            if (eventId.HasValue) {
                Event.EditEvent(eventId.Value, calendarId, name, description, location, Time.LocalToUtc(start), Time.LocalToUtc(end), don, Convert.ToBoolean(allDay));
            } else {
                eventId = Event.AddEvent(WebSecurity.CurrentUserId, calendarId, name, description, location, Time.LocalToUtc(start), Time.LocalToUtc(end), don, Convert.ToBoolean(allDay));
                
                // Gmail연동
                WebmailSender.Send();
            }
            Response.Redirect("~/Event/Info/" + eventId);
        }
    }
}
@Html.ValidationSummary()
<form method="post" action="">
    <table class="info">
        <tr>
            <td><label for="name">이벤트 이름</label></td>
            <td><input type="text" id="name" name="name" value="@(eventId.HasValue ? eventInfo.Name : "")" /></td>
        </tr>
        <tr>
            <td><label for="description">이벤트 설명</label></td>
            <td><textarea id="description" name="description" rows="3" cols="15">@(eventId.HasValue ? eventInfo.Description : "")</textarea></td>
        </tr>
        <tr>
            <td><label for="location">이벤트 위치</label></td>
            <td><input type="text" id="location" name="location" value="@(eventId.HasValue ? eventInfo.Location : "")" /></td>
        </tr>
        <tr>
            <td><label for="don">금액</label></td>
            <td><input type="text" id="don" name="don" value="@(eventId.HasValue ? eventInfo.Don : "0")" /></td>
        </tr>
        <tr>
            <td><label for="allDay">종일 이벤트</label></td>
            <td><input type="checkbox" id="allDay" name="allDay" @((eventId.HasValue && eventInfo.AllDay) ? " checked=\"checked\"" : "") /></td>
        </tr>
        <tr>
            <td>시작</td>
            <td>
                <label for="sDate">날짜:</label> <input type="text" class="datepicker" id="sDate" name="sDate" value="@start.ToString("d")" /> <label for="sTime">시간:</label> <input type="text" id="sTime" name="sTime" value="@start.ToString("t")" />
            </td>
        </tr>
        <tr>
            <td>끝</td>
            <td>
                <label for="eTime">시간:</label> <input type="text" id="eTime" name="eTime" value="@end.ToString("t")" />
            </td>
        </tr>
        <tr>
            <td><label for="calendar">달력 이름</label></td>
            <td>
                <select id="calendar" name="calendar">
                    @foreach (var calendar in calendars) {
                        <option style="background-color: @calendar.Color" value="@calendar.CalendarId" @(eventId.HasValue && (calendar.CalendarId == eventInfo.CalendarID) ? " selected=\"selected\"" : "")>
                            @calendar.Name
                        </option>
                    }
                </select>
            </td>
        </tr>
        <tr>
            <td colspan="2" class="center"><input type="submit" name="submit" value="@(eventId.HasValue ? "Save" : "Create")" /></td>
        </tr>
    </table>
</form>